#!/bin/bash
# 输出一些状态信息（可选）
echo "欢迎cd2一键安装"
echo "Docker container clouddrive2 started with image cloudnas/clouddrive2"
echo "开始中——————--:"
echo "输出系统当前所有挂载点-----------------------:"

# 检查磁盘空间（可选，用于检查宿主机磁盘状况）
df -h

# 设置默认挂载点为 /
default_mount_point="/"

# 请求用户输入要设置为共享挂载点的路径
echo "请输入要设置为共享挂载点的路径 (默认为 '/')，直接回车使用默认值:"
read shared_mount_point

# 如果用户未输入任何内容，使用默认挂载点
if [ -z "$shared_mount_point" ]; then
    shared_mount_point=$default_mount_point
    echo "使用默认挂载点: $shared_mount_point"
fi

# 设置共享挂载点
sudo mount --make-shared "$shared_mount_point"

# 请求用户输入共享卷路径
echo "请输入本地挂载路径（如 /CloudNAS）:"
read shared_volume
echo "已设本地挂载路径为: $shared_volume"
echo "docker映射情况：
-e CLOUDDRIVE_HOME=$clouddrive_home \
  -v $shared_volume/shared:/CloudNAS:shared \
  -v $shared_volume/Config:/Config" \
  -v $shared_volume/media/shared:/media:shared" \
"

# 使用env变量设置CLOUDDRIVE_HOME环境变量
clouddrive_home="/Config"
export CLOUDDRIVE_HOME=$clouddrive_home

# 使用-v选项挂载共享卷
docker run -d \
  --name clouddrive \
  --restart unless-stopped \
  -e CLOUDDRIVE_HOME=$clouddrive_home \
  -v "$shared_volume/shared:/CloudNAS:shared" \
  -v "$shared_volume/Config:/Config" \
  -v "$shared_volume/media/shared:/media:shared" \
  --network host \
  --pid host \
  --privileged \
  --device /dev/fuse:/dev/fuse \
  cloudnas/clouddrive2

#防火墙放行 端口
PORT="19798"
# 检查iptables是否安装
if ! command -v iptables &> /dev/null
then
    echo "iptables not found. Please make sure iptables is installed."
    exit 1
fi

# 添加防火墙规则放行TCP端口
echo "Opening TCP port $PORT..."
/sbin/iptables -A INPUT -p tcp --dport $PORT -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport $PORT -j ACCEPT

# 如果是Ubuntu或Debian系统，并且使用了ufw防火墙，还需要更新ufw规则
if command -v ufw &> /dev/null
then
    echo "Updating ufw rules for TCP port $PORT..."
    /usr/sbin/ufw allow $PORT/tcp
fi

echo "Port $PORT has been opened."


# 提醒用户保存iptables规则以防止重启后丢失
echo "Please remember to save the iptables rules with 'sudo iptables-save' if needed."

# 获取服务器IP
# 初始化IP为空
ip=""

# 遍历所有网络接口
for interface in $(ip -o -4 addr show | awk '/inet /{split($2,a,":");print a[1]}'); do
    # 获取接口的IPv4地址（排除环回地址）
    temp_ip=$(ip -4 addr show dev "$interface" scope global | grep -Po '(?<=inet )[^/]*' | grep -v '^127\.')

    # 如果找到了非环回地址的有效IP地址，将其赋值给变量ip并跳出循环
    if [[ ! -z "$temp_ip" ]]; then
        ip="$temp_ip"
        break
    fi
done

# 如果没有找到非环回地址，尝试查找局域网地址（scope link）
if [[ -z "$ip" ]]; then
    for interface in $(ip -o -4 addr show | awk '/inet /{split($2,a,":");print a[1]}'); do
        # 获取接口的IPv4地址（包括本地链路地址）
        temp_ip=$(ip -4 addr show dev "$interface" scope link | grep -Po '(?<=inet )[^/]*' | grep -v '^127\.')

        # 如果找到了非环回地址的有效IP地址，将其赋值给变量ip并跳出循环
        if [[ ! -z "$temp_ip" ]]; then
            ip="$temp_ip"
            break
        fi
    done
fi

# 在这里，你可以在脚本中继续使用变量$ip
# ...
ip1=$(curl -s ifconfig.me)

# 检测IPV6地址并决定公网访问链接格式
if echo "$ip1" | grep -qE '^([0-9a-fA-F]{1,4}:){1,7}[0-9a-fA-F]{1,4}$'; then
  # 如果是IPv6地址
  public_url="http://[$ip1]:19798"
else
  # 如果是IPv4地址
  public_url="http://$ip1:19798"
fi

# 输出一些状态信息（可选）
echo "安装成功"
echo "局域网访问：http://$ip:19798"
echo "公网访问：$public_url"